package Test01

import org.apache.commons.lang3.StringUtils
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Spark_Test01 {
  def main(args: Array[String]): Unit = {
    //1、读取文件
    val conf = new SparkConf().setMaster("local[6]").setAppName("test")
    val sc = new SparkContext(conf)
    val sourceRDD = sc.textFile("resource/a.csv")
    //2、通过算子处理数据
        //1、抽取数据(年  月  PM)=>((年，月),PM)
        //2、清洗,过滤掉空的字符串，过滤掉NA
        //3、聚合
        //4、排序
    //将年和月看成是key，PM是v
    val resultRDD: RDD[((String, String), Int)] = sourceRDD.map(item => ((item.split(",")(1), item.split(",")(2)), item.split(",")(6)))
      //清洗PM为空的数据,和NA的数据
      .filter(item => StringUtils.isNotEmpty(item._2) && !item._2.equalsIgnoreCase("NA"))
      //转换PM的类型为int
      .map(item => (item._1, item._2.toInt))
      //求日期相同的PM的和
      .reduceByKey((curr, agg) => curr + agg)
      //按照PM值进行排序
      .sortBy(item => item._2)
    //3、获取结果
    resultRDD.take(10).foreach(println)
    //4、关闭资源
    sc.stop()
  }
}
